tokio::sync
模塊提供了幾種狀態同步的機制:
當多個併發任務(tokio task或線程)可能會修改同一個數據時,就會出現數據競爭現象(競態),具體表現為:某個任務對該數據的修改不生效或被覆蓋。
互斥鎖的作用,就是保護併發情況下可能會出現競態的代碼,這部分代碼稱為臨界區。當某個任務要執行臨界區中的代碼時,必須先申請鎖,申請成功,則可以執行這部分代碼,執行完成這部分代碼後釋放鎖。釋放鎖之前,其它任務無法再申請鎖,它們必須等待鎖被釋放。
假如某個任務一直持有鎖,其它任務將一直等待。因此,互斥鎖應當儘量快地釋放,這樣可以提高併發量。
簡單介紹完互斥鎖之後,再看tokio提供的互斥鎖。
tokio::sync::Mutex使用new()來創建互斥鎖,使用lock()來申請鎖,申請鎖成功時將返回MutexGuard,並通過drop的方式來釋放鎖。